package editorsvg.propiedades;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JPopupMenu;

/**
 * Propiedad que contiene un objeto string
 *
 * @author Jorge Berjano
 */
public class PropiedadTextoOpciones extends PropiedadTexto {

    private Object[] opciones; //No se pueden añadir Objetos no serializables
    protected JButton botonEdicion;
    private JPopupMenu menu;

    /** Constructor por defecto */
    public PropiedadTextoOpciones() {
    }

    @Override
    public Class getClase() {
        return String.class;
    }

    public Object[] obtenerOpciones() {
        return opciones;
    }

    public void asignarOpciones(Object[] opciones) {
        this.opciones = opciones;
    }

    @Override
    public JComponent obtenerComponenteModificacion() {
        if (botonEdicion == null) {
            botonEdicion = new JButton("...");
            botonEdicion.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent evento) {
                    botonPulsado(evento);
                }
            });
        }
        return botonEdicion;
    }
    // Si se pulsa el botón se muestra un menu contextual con las opciones
    private void botonPulsado(ActionEvent evento) {
        if (menu == null) {
            menu = new JPopupMenu();
            for (Object opcion : opciones) {
                menu.add(new AbstractAction(opcion.toString()) {

                    public void actionPerformed(ActionEvent evento) {
                        opcionSeleccionada(evento);
                    }
                });
            }
        }
        menu.show(botonEdicion, 0, botonEdicion.getSize().height);
    }

    private void opcionSeleccionada(ActionEvent evento) {
        asignarTexto(evento.getActionCommand());
    //notificarCambios();
    }

    public boolean permitirEditarTexto() {
        return false;
    }
}
